package team.knowers.qzhserver.course.datum.datum.service.Impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import team.knowers.qzhserver.common.service.RedisService;
import team.knowers.qzhserver.course.datum.datum.entity.dao.DatumDO;
import team.knowers.qzhserver.course.datum.datum.service.DatumCacheService;

import java.util.HashSet;
import java.util.Set;

@Service
public class DatumCacheServiceImpl implements DatumCacheService {
    @Autowired
    private RedisService redisService;
    @Value("${redis.expire.common}")
    private Long REDIS_EXPIRE;
    @Value("${redis.key.datum}")
    private String REDIS_KEY_DATUM;
    @Value("${redis.key.courseDatumSet}")
    private String REDIS_KEY_COURSE_DATUM_SET;
    @Override
    public void setDatum(DatumDO datumDO) {
        String key = REDIS_KEY_DATUM + ":" + datumDO.getId();
        redisService.set(key,datumDO,REDIS_EXPIRE);
    }

    @Override
    public DatumDO getDatum(String id) {
        String key = REDIS_KEY_DATUM + ":" + id;
        return (DatumDO)redisService.get(key);
    }

    @Override
    public void delDatum(String id) {
        String key = REDIS_KEY_DATUM + ":" + id;
        redisService.del(key);
    }

    @Override
    public void setCourseDatumSetAll(String cid, Set<String> data) {
        String key =REDIS_KEY_COURSE_DATUM_SET + ":" + cid;
        redisService.sAdd(key,REDIS_EXPIRE,data.toArray());
    }

    @Override
    public void setCourseDatumSet(String cid, String id) {
        String key =REDIS_KEY_COURSE_DATUM_SET + ":" + cid;
        redisService.sAdd(key,REDIS_EXPIRE,id);
    }

    @Override
    public Boolean existCourseDatumSet(String cid, String id) {
        String key =REDIS_KEY_COURSE_DATUM_SET + ":" + cid;
        return redisService.sIsMember(key,id);
    }

    @Override
    public void delCourseDatumSetAll(String cid) {
        String key =REDIS_KEY_COURSE_DATUM_SET + ":" + cid;
        redisService.del(key);
    }

    @Override
    public void delCourseDatumSet(String cid, String id) {
        String key =REDIS_KEY_COURSE_DATUM_SET + ":" + cid;
        redisService.sRemove(key,id);
    }

    @Override
    public Set<String> getCourseDatumSet(String cid) {
        String key =REDIS_KEY_COURSE_DATUM_SET + ":" + cid;
        Set<String> output = new HashSet<>();
        for(Object obj:redisService.sMembers(key)){
            output.add(obj.toString());
        }
        return output;
    }
}
